package tur.br.moradadosol.model;

import java.io.Serializable;
import java.util.Calendar;

import tur.br.moradadosol.util.Util;

public class Hospedagem implements Serializable {
	
	private static final long serialVersionUID = -7404010205223660632L;

	//Constantes da hospedagem
	/** Indica que o registro da hospedagem é uma reserva futura. */
	public static final int STATUS_RESERVA = 0;
	
	/** Indica que o hospede já efetuou a entrada. */
	public static final int STATUS_ENTRADA = 1;
	
	/** Indica que o hospede já efetuou a saída. Hospedagem concluída */
	public static final int STATUS_SAIDA = 2;
	
	/** Indica que a reserva foi cancelada. */
	public static final int STATUS_CANCELADA = 3;
	
	private long codigo;
	private Apartamento apartamento;
	private Hospede hospede;
	private Calendar entrada;
	private Calendar saida;
	private int quantidade;
	private float preco;
	private String[] acompanhantes;
	private String solicitante;
	private Calendar dataSolicitacao;
	private Calendar dataLimite;
	
	/** valor do sinal */
	private float sinal;
	
	/** Valor restante estimado */
	private float restante;
	
	private boolean sinalPago = false;
	private boolean restantePago = false;
	
	/*
	 * 0 - Reserva
	 * 1 - Entrou
	 * 2 - Saiu
	 * 3 - Cancelada
	 */
	private int status;
	private String modeloCarro;
	private String placaCarro;
	private String chave;
	
//	public Hospedagem() {
//		dataSolicitacao = Calendar.getInstance();
//	}
	
	public String[] getAcompanhantes() {
		return acompanhantes;
	}
	
	/**
	 * Retorna a lista de acompanhantes, separado por #.
	 * @return
	 */
	public String getAcompanhantesConc() {
		StringBuffer sb = new StringBuffer();
		
		if(acompanhantes!=null && acompanhantes.length>0) {
			for(int i=0; i<acompanhantes.length; i++) {
				if(i>0)	sb.append("#");
				sb.append(acompanhantes[i]);
			}
		}
		
		return sb.toString();
	}

	public Apartamento getApartamento() {
		return apartamento;
	}

	public long getCodigo() {
		return codigo;
	}

	public Calendar getDataLimite() {
		return dataLimite;
	}

	public Calendar getDataSolicitacao() {
		return dataSolicitacao;
	}

	public Calendar getSaida() {
		return saida;
	}

	public Hospede getHospede() {
		return hospede;
	}

	public Calendar getEntrada() {
		return entrada;
	}

	public float getSinal() {
		return sinal;
	}

	public float getRestante() {
		return restante;
	}

	public float getPreco() {
		return preco;
	}

	public int getQuantidade() {
		return quantidade;
	}

	public String getSolicitante() {
		return solicitante;
	}

	public int getStatus() {
		return status;
	}

	public void setAcompanhantes(String[] acompanhantes) {
		this.acompanhantes = acompanhantes;
	}

	public void setAcompanhantes(String acompConcat) {
		if(acompConcat != null && acompConcat.trim().length() > 0) {
			this.acompanhantes = acompConcat.split("#");
		}
	}

	public void setApartamento(Apartamento apartamento) {
		this.apartamento = apartamento;
	}

	public void setCodigo(long codigo) {
		this.codigo = codigo;
	}

	public void setDataLimite(Calendar dataLimite) {
		this.dataLimite = dataLimite;
	}

	public void setDataSolicitacao(Calendar dataSolicitacao) {
		this.dataSolicitacao = dataSolicitacao;
	}

	public void setSaida(Calendar fim) {
		this.saida = fim;
	}

	public void setHospede(Hospede hospede) {
		this.hospede = hospede;
	}

	public void setEntrada(Calendar inicio) {
		this.entrada = inicio;
	}

	public void setSinal(float pagamentoReserva) {
		this.sinal = pagamentoReserva;
	}

	public void setRestante(float pagamentoRestante) {
		this.restante = pagamentoRestante;
	}

	public void setPreco(float preco) {
		this.preco = preco;
	}

	public void setQuantidade(int quantidade) {
		this.quantidade = quantidade;
	}

	public void setSolicitante(String solicitante) {
		this.solicitante = solicitante;
	}

	public void setStatus(int status) {
		this.status = status;
	}
	
	public String getInicioFormatado() {
		return Util.getDate(entrada);
	}
	
	public String getFimFormatado() {
		return Util.getDate(saida);
	}

	public String getModeloCarro() {
		return modeloCarro;
	}

	public void setModeloCarro(String modeloCarro) {
		this.modeloCarro = modeloCarro;
	}

	public String getPlacaCarro() {
		return placaCarro;
	}

	public void setPlacaCarro(String placaCarro) {
		this.placaCarro = placaCarro;
	}

	public String getChave() {
		return chave;
	}

	public void setChave(String chave) {
		this.chave = chave;
	}
	
	/**
	 * @return the restantePago
	 */
	public boolean isRestantePago() {
		return restantePago;
	}

	/**
	 * @param restantePago the restantePago to set
	 */
	public void setRestantePago(boolean restantePago) {
		this.restantePago = restantePago;
	}

	/**
	 * @return the sinalPago
	 */
	public boolean isSinalPago() {
		return sinalPago;
	}

	/**
	 * @param sinalPago the sinalPago to set
	 */
	public void setSinalPago(boolean sinalPago) {
		this.sinalPago = sinalPago;
	}
}
